package main

import (
	"fmt"
	"math"
)

func main() {
	arr := []int{101, 25, 37, 40, 5, 10, 19, 32}
	//返回参数也是将值赋给变量，并非是返回值的引用,因此在函数外输出的地址和函数内不一样
	maxVal, minVal := getMaxMin(arr)
	fmt.Printf("max的物理地址 %p\n", &maxVal)
	fmt.Printf("min的物理地址 %p\n", &minVal)
	fmt.Printf("最大值 %d\n", maxVal)

	fmt.Printf("最小值 %d\n", minVal)

}

// 这种写法适合返回值很多，函数体复杂的情况。针对不同的分支返回哪些变量以及其顺序问题，都可以不在考虑
func getMaxMin(arr []int) (max, min int) {
	max = 0
	min = math.MaxInt64
	for _, item := range arr {
		if item > max {
			max = item
		}
		if item < min {
			min = item
		}
	}
	//%p为获取指针类型的值
	fmt.Printf("max的物理地址 %p\n", &max)
	fmt.Printf("min的物理地址 %p\n", &min)
	//省略return后面的变量列表
	return
}
